In the conventional art, network devices (computers, workstations, servers, or the like) generally comprise hardware, an operating system, and one or more user programs (hereinafter referred to as applications). The hardware (e.g., processor, memory, input/output devices, etc.) provides the basic computing resources. The applications (e.g., database systems, text editors, games, and the like) provide users with various functions. The operating system controls and coordinates the use of the hardware among the various applications.
The Unix operating system (Unix) is one example of an operating system that is currently used by many enterprise computer systems. Unix consists of two separable parts, which include the kernel space and user space. The user space typically provides an operating environment for executing system libraries, compilers, interpreters, shells and other such modules, which provide useful functions to the user. The kernel space provides an operating environment for executing central control processes such as file-system access, communication protocols, and other system facilities.
The kernel space typically includes one or more network communication protocols, such as the TCP/IP protocol suite. The TCP/IP protocol suite is typically divided into three software layers: transport layer, internet layer, and network access layer. The transport layer (TCP) provides a flow control protocol. The flow control protocol keeps track of data packets to assure reliable delivery to an appropriate application. It includes explicit and acknowledged connection initiation and termination, reliable in-order unduplicated delivery of data, and out of band indication of urgent data. The internet layer (IP) provides an addressing and routing protocol. The addressing and routing protocol provides host-to-host addressing and routing of data packets, data packet fragmentation and reassembly. The network access layer provides a driver protocol. The driver protocol provides access to and transmission of data across a communication channel (physical layer).
Referring to FIG. 1, a diagram of a network communication receive stream in accordance with the convention art is shown. As depicted in FIG. 1, one or more data packets 110 are individually communicated across a communication channel. Each data packet is comprised of a header 115 and a payload 120. A driver module 125 receives the data packets and stores them in a buffer. The driver module 125 sends an interrupt to the processor indicating that a data packet has been received. The interrupt causes the protocol module 130 to process the header, providing for addressing and flow control. In so doing the protocol module 130 fetches the header portion of the data packet 135. The interrupt then causes the application 140 to process the payload. In so doing, the application 140 also fetches the payload portion of the data packet 145.
In the conventional art, the above process is repeated in sequence for each data packet received. The packets thereby being individually loaded. Thus, such a protocol is inefficient for data locality, because each data packet resides in different memory locations. Such a protocol also incurs high input/output memory management units costs. For example, if three data packets are received, six fetch cycles are required. The protocol performs an input/output memory management unit for fetching the header of each data packet. The application also performs an input/output memory management unit for fetching the payload of each data packet. The protocol also introduces unnecessary additional interaction between the transport layer and the application. Hence, the overall processing costs are very high according to the conventional art.
Furthermore, the transfer layer has a finite buffer for holding data packets. In the current art, if the data packets are received faster than the protocol module can process them, the driver module may drop data packets.